//dp[i]:if Max v is w, then need w + dp[i]
#include <iostream>
#include <cstring>
using namespace std;
const int N = 3e5 + 10;
int n, leaf;
int fa[N], dp[N], m[N];
int h[N], e[N], ne[N], idx;
void add(int a, int b) {
e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
void dfs(int x) {
for (int i = h[x]; ~i; i = ne[i]) {
int j = e[i];
dfs(j);
}
if (h[x] == -1) dp[x] = 0, leaf ++;
else {
if (m[x]) {
dp[x] = 998244353;
for (int i = h[x]; ~i; i = ne[i]) dp[x] = min(dp[x], dp[e[i]]);
}
else {
for (int i = h[x]; ~i; i = ne[i]) dp[x] += dp[e[i]] + 1;
dp[x] --;
}
}
}
int main() {
memset(h, -1, sizeof h);
scanf("%d", &n);
for (int i = 1; i <= n; i ++) scanf("%d", &m[i]);
for (int i = 2; i <= n; i ++) {
scanf("%d", &fa[i]);
add(fa[i], i);
}
dfs(1);
printf("%d", leaf - dp[1]);
return 0;
}
236A - Boy or Girl | 271A - Beautiful Year |
520B - Two Buttons | 231A - Team |
479C - Exams | 1030A - In Search of an Easy Problem |
158A - Next Round | 71A - Way Too Long Words |
160A - Twins | 1A - Theatre Square |
1614B - Divan and a New Project | 791A - Bear and Big Brother |
1452A - Robot Program | 344A - Magnets |
96A - Football | 702B - Powers of Two |
1036A - Function Height | 443A - Anton and Letters |
1478B - Nezzar and Lucky Number | 228A - Is your horseshoe on the other hoof |
122A - Lucky Division | 1611C - Polycarp Recovers the Permutation |
432A - Choosing Teams | 758A - Holiday Of Equality |
1650C - Weight of the System of Nested Segments | 1097A - Gennady and a Card Game |
248A - Cupboards | 1641A - Great Sequence |
1537A - Arithmetic Array | 1370A - Maximum GCD |